package ControleAcademico.Model.Dao;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import ControleAcademico.Model.Pojo.Aluno;
import ControleAcademico.Model.Pojo.Faltas;
import ControleAcademico.Model.Pojo.Turma;

public class FaltasImpl implements FaltasDao {

	private ArrayList<Faltas> listaDeFaltas;
	private AlunoImpl alunoImpl;
	private TurmaImpl turmaImpl;
	
	public FaltasImpl(AlunoImpl alunoImpl,TurmaImpl turmaImpl) {
		this.listaDeFaltas = new ArrayList<Faltas>();
		this.alunoImpl = alunoImpl;
		this.turmaImpl = turmaImpl;
	}
	
	public FaltasImpl() {
		this.listaDeFaltas = new ArrayList<Faltas>();
	}
	
	@Override
	public void salvar(Faltas faltas, int flag){
			
			try{
				if (flag != -1) {
					listaDeFaltas.add(faltas);
				} else {
					PrintWriter p = new PrintWriter("Faltas.txt");
					
					for(Faltas i : listaDeFaltas){
						p.write(i.getId()+"\t");
						p.write(i.getNumeroFaltas()+"\t");
						p.write ("Aluno\t");
						p.write (i.getAluno().getId()+"\t");
						p.write ("Turma\t");
						p.write(i.getTurma().getId()+"\t");
						p.write("#");
						p.write("\n");
					}
					p.close();
				}
			}catch(Exception e){
				
			}
		}
		
		public ArrayList<Faltas> getListaDeFaltas() {
			return listaDeFaltas;
		}
		
		public void adicionarFaltas (Faltas faltas){
			listaDeFaltas.add(faltas);
		}
		
		public Faltas pesquisarArquivo(int id){
			String linha;
			Faltas faltas = null;
	
			try{
				FileReader reader = new FileReader("Faltas.txt");    	
		        BufferedReader leitor = new BufferedReader(reader);
		        
		        while ((linha = leitor.readLine()) != null) {
		        	String[] dados = linha.split("\t");
		        	if(dados[0].equals(id+"")){
		        		faltas = new Faltas(Integer.parseInt(dados[0]));
		        		return faltas;
		        	}
		        }
			}catch(Exception e){
				
			}
	        return faltas;
		}	
		
		@Override
		public void carregar() {
		      String linha = null; 
		      
		      try {  
		    	 FileReader reader = new FileReader("Faltas.txt");    	
		         BufferedReader leitor = new BufferedReader(reader);  
		         Aluno aluno;
		         Turma turma;
		         Faltas faltas = null;
		        
		         while ((linha = leitor.readLine()) != null) {  
		            String[] dados = linha.split("\t"); 
		            int identificador = Integer.parseInt(dados[0]);
	
		            if (!this.pesquisarNaListaImpl(Integer.parseInt(dados[0]))){
		            	faltas = new Faltas (identificador);
		               	aluno = alunoImpl.pesquisarNaListaImpl(Integer.parseInt(dados[3]));
			            faltas.setAluno(aluno);
			            turma = turmaImpl.pesquisarArquivo(Integer.parseInt(dados[5]));
			            turmaImpl.adicionarTurma(turma);
			            faltas.setTurma(turma);
			            faltas.setNumeroFaltas(Integer.parseInt(dados[1]));
			            listaDeFaltas.add(faltas); 
		            }else{
		            	for (Faltas i : listaDeFaltas) {
							if (i.getId() == identificador){
								faltas = i;
							}
						}
		            
		            	aluno = alunoImpl.pesquisarNaListaImpl(Integer.parseInt(dados[3]));
			            faltas.setAluno(aluno);
			            turma = turmaImpl.pesquisarArquivo(Integer.parseInt(dados[5]));
			            turmaImpl.adicionarTurma(turma);
			            faltas.setTurma(turma);
			            faltas.setNumeroFaltas(Integer.parseInt(dados[1]));
		            }
		         }  
		         leitor.close();  
		         reader.close();  
		      } catch (Exception e) { 
		    	  
		      }  
		  }
		
		public void setAlunoImpl(AlunoImpl alunoImpl){
			this.alunoImpl = alunoImpl;
		}
		
		public void setTurmaImpl(TurmaImpl turmaImpl){
			this.turmaImpl = turmaImpl;
		}
		
		public boolean pesquisarNaListaImpl(int id){
			for (Faltas faltas : listaDeFaltas) {
				if (faltas.getId() == id){
					return true;		
				}
			}
			return false;
		}
		
		
		public Faltas pesquisarFaltas(int id){
			Faltas faltas = null;
			
			for (Faltas i : listaDeFaltas) {
				if (i.getId() == id){
					faltas = i;
					return faltas;		
				}
			}
			return faltas;
		}
	
}